﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Web.Http;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TccServicos;
using TccServicos.Controllers;
using TccServicos.Models;
using System.Net;
using Newtonsoft.Json;
using System.Web.UI.WebControls;
using System.IO;
using TccServicos.Negocio;

namespace TccServicos.Tests.Controllers
{
    [TestClass]
    public class ServicosControllerTest
    {
        #region Testes TCC
        [TestMethod]
        public void TesteSaveGenero()
        {
            /*
            Cachorro
            Gato
            Hamster
            Chinchila
            Passaro
            */

            Genero genero = new Genero()
            {
                genero = "Tartaruga",
            };
            string json = JsonConvert.SerializeObject(genero, new JsonSerializerSettings() 
            { 
                NullValueHandling = NullValueHandling.Ignore 
            });
            
            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Genero/SaveGenero", json);

            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));

            
        }

        [TestMethod]
        public void TesteGetGenero()
        {
            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            //string retorno = webClient.DownloadString("http://lkrjunior-com.umbler.net/api/Genero/GetGenero?idGenero=1");
            //string retorno = webClient.DownloadString("http://lkrjunior-com.umbler.net/api/Genero/GetGenero");
            string retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/Genero/GetGenero?Genero={0}", Uri.EscapeDataString("o")));

            List<Genero> retornoServico = (List<Genero>)JsonConvert.DeserializeObject(retorno, typeof(List<Genero>));

            Assert.IsTrue(retornoServico != null);
            
        }

        [TestMethod]
        public void TesteSaveGetRacaPortePessoa()
        {
            Raca raca = new Raca()
            {
                raca = "Rottweiler",
            };
            string json = JsonConvert.SerializeObject(raca, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Raca/SaveRaca", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));


            Porte porte = new Porte()
            {
                porte = "Medio",
            };
            json = JsonConvert.SerializeObject(porte, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });
            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Porte/SavePorte", json);
            retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));


            Pessoa pessoa = new Pessoa()
            {
                nome = "Luciano",
                telefone = "51 99182 1270",
                email = "lkrjunior@terra.com.br",
            };
            json = JsonConvert.SerializeObject(pessoa, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });
            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Pessoa/SavePessoa", json);
            retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));


            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "Raca", "Raca"));
            List<Raca> retorno1 = (List<Raca>)JsonConvert.DeserializeObject(retorno, typeof(List<Raca>));

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "Porte", "Porte"));
            List<Porte> retorno2 = (List<Porte>)JsonConvert.DeserializeObject(retorno, typeof(List<Porte>));

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "Pessoa", "Pessoa"));
            List<Pessoa> retorno3 = (List<Pessoa>)JsonConvert.DeserializeObject(retorno, typeof(List<Pessoa>));


            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
            
        }

        [TestMethod]
        public void TestePessoaFiltro()
        {
            PessoaFiltro pessoa = new PessoaFiltro()
            {
                pessoa = new Pessoa() { idPessoa = 2 },
                genero = new Genero() { idGenero = 1 },
                //raca = new Raca() { idRaca = 2},
                porte = new Porte() { idPorte = 2},
                idadeMin = 3,
                pesoMin = 2,
                pesoMax = 5,
            };
            string json = JsonConvert.SerializeObject(pessoa, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/PessoaFiltro/SavePessoaFiltro", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));


            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "PessoaFiltro", "PessoaFiltro"));
            List<PessoaFiltro> retorno1 = (List<PessoaFiltro>)JsonConvert.DeserializeObject(retorno, typeof(List<PessoaFiltro>));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
           
        }

        [TestMethod]
        public void TesteAnimal()
        {
            Animal animalAbandonado = new Animal()
            {
                animalTipo = AnimalTipo.Abandonado,
                pessoa = new Pessoa() { idPessoa = 2 },
                descricao = "Animal Abandonado Sapucaia",
                latitude = Decimal.Parse("35.41"),
                longitude = Decimal.Parse("65.87"),
                
            };
            string json = JsonConvert.SerializeObject(animalAbandonado, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Animal/SaveAnimal", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            /*
            Animal animalDoacao = new Animal()
            {
                animalTipo = AnimalTipo.Doacao,
                pessoa = new Pessoa() { idPessoa = 2 },
                genero = new Genero() { idGenero = 1 },
                raca = new Raca() { idRaca = 2},
                idade = 5,
                //porte = new Porte() { idPorte = 2 },
                peso = decimal.Parse("15.6"),
                cidade = new Cidade(){ idCidade = 1, uf = new Uf() { idUf = 1 } },
                telefone = "51 99252 7182",
                email = "teste@teste.com.br",
                descricao = "Animal Doação Sapucaia",
                vacinas = "sem vacinas",
            };
            */

            Animal animalDoacao = new Animal()
            {
                animalTipo = AnimalTipo.Doacao,
                pessoa = new Pessoa() { idPessoa = 2 },
                genero = new Genero() { idGenero = 1 },
                raca = new Raca() { idRaca = 3 },
                idade = 2,
                porte = new Porte() { idPorte = 3 },
                peso = decimal.Parse("12,2"),
                cidade = new Cidade() { idCidade = 1, uf = new Uf() { idUf = 1 } },
                telefone = "51 99999 0909",
                email = "teste@teste.com.br",
                descricao = "Animal Doação Rottweiler",
                vacinas = "vacinas realizadas",
                //foto = new Foto() { idFoto = 1},
                nome = "preto",
            };
            json = JsonConvert.SerializeObject(animalDoacao, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Animal/SaveAnimal", json);
            retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));



            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "Animal", "Animal"));
            RetornoAnimal retorno1 = (RetornoAnimal)JsonConvert.DeserializeObject(retorno, typeof(RetornoAnimal));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
            
        }

        [TestMethod]
        public void TesteInclusaoAlteracaoGenero()
        {
            Genero genero = new Genero()
            {
                genero = "teste",
            };
            string json = JsonConvert.SerializeObject(genero, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Genero/SaveGenero", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            genero.idGenero = 10;
            genero.genero = "teste2";
            json = JsonConvert.SerializeObject(genero, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Genero/SaveGenero", json);
            RetornoServico retornoServico2 = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "Genero", "Genero"));
            List<Genero> listaGet = (List<Genero>)JsonConvert.DeserializeObject(retorno, typeof(List<Genero>));



            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
        }

        [TestMethod]
        public void TesteInclusaoFoto()
        {
            byte[] imagemBytes = null;
            string caminhoCompletoImagem = @"C:\\TccServicosSite\\Rottweiler.jpg";
            FileStream fs = new FileStream(caminhoCompletoImagem, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            imagemBytes = br.ReadBytes(Convert.ToInt32(fs.Length));
            string teste = Encoding.UTF8.GetString(imagemBytes);
            string teste2 = BitConverter.ToString(imagemBytes);

            Foto foto = new Foto()
            {
                nome = "Rottweiler",
                tipo = "jpg",
                foto = imagemBytes,
            };
            string json = JsonConvert.SerializeObject(foto, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Foto/SaveFoto", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "Foto", "Foto"));
            List<Foto> listaGet = (List<Foto>)JsonConvert.DeserializeObject(retorno, typeof(List<Foto>));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
        }
        #endregion

        #region Testes TAADS
        [TestMethod]
        public void TesteSaveTAADS()
        {
            //Primeiro Cadastro
            ChamadaCadastro cadastro = new ChamadaCadastro()
            {
                matricula = "180000D1D",
                nome = "Luciano Rocha",
            };
            string json = JsonConvert.SerializeObject(cadastro, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/ChamadaCadastro/SaveChamadaCadastro", json);

            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));


            //Segundo Cadastro
            ChamadaCadastro cadastro2 = new ChamadaCadastro()
            {
                matricula = "524235415",
                nome = "Nome do Aluno",
            };
            string json2 = JsonConvert.SerializeObject(cadastro2, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClient2 = new WebClient();
            webClient2.Encoding = new System.Text.UTF8Encoding();
            webClient2.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno2 = webClient2.UploadString("http://lkrjunior-com.umbler.net/api/ChamadaCadastro/SaveChamadaCadastro", json2);

            RetornoServico retornoServico2 = (RetornoServico)JsonConvert.DeserializeObject(retorno2, typeof(RetornoServico));


            //Primeira Chamada
            ChamadaChamada chamada = new ChamadaChamada()
            {
                matricula = "180000D1D",
                turma = "ADS",
                data = "2017-05-17",
            };
            string jsonChamada = JsonConvert.SerializeObject(chamada, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClientChamada = new WebClient();
            webClientChamada.Encoding = new System.Text.UTF8Encoding();
            webClientChamada.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retornoChamada = webClientChamada.UploadString("http://lkrjunior-com.umbler.net/api/ChamadaChamada/SaveChamadaChamada", jsonChamada);

            RetornoServico retornoServicoChamada = (RetornoServico)JsonConvert.DeserializeObject(retornoChamada, typeof(RetornoServico));


            //Segunda Chamada
            ChamadaChamada chamada2 = new ChamadaChamada()
            {
                matricula = "524235415",
                turma = "ADS",
                data = "2017-05-17",
            };
            string jsonChamada2 = JsonConvert.SerializeObject(chamada2, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClientChamada2 = new WebClient();
            webClientChamada2.Encoding = new System.Text.UTF8Encoding();
            webClientChamada2.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retornoChamada2 = webClientChamada2.UploadString("http://lkrjunior-com.umbler.net/api/ChamadaChamada/SaveChamadaChamada", jsonChamada2);

            RetornoServico retornoServicoChamada2 = (RetornoServico)JsonConvert.DeserializeObject(retornoChamada2, typeof(RetornoServico));


            //Terceira Chamada
            ChamadaChamada chamada3 = new ChamadaChamada()
            {
                matricula = "524235415",
                turma = "ADS",
                data = "2017-05-10",
            };
            string jsonChamada3 = JsonConvert.SerializeObject(chamada3, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClientChamada3 = new WebClient();
            webClientChamada3.Encoding = new System.Text.UTF8Encoding();
            webClientChamada3.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retornoChamada3 = webClientChamada3.UploadString("http://lkrjunior-com.umbler.net/api/ChamadaChamada/SaveChamadaChamada", jsonChamada3);

            RetornoServico retornoServicoChamada3 = (RetornoServico)JsonConvert.DeserializeObject(retornoChamada3, typeof(RetornoServico));


            //Retorno Ok
            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
        }

        [TestMethod]
        public void TesteGetTAADS()
        {
            //Buscando conteudo do Cadastro
            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/ChamadaCadastro/GetChamadaCadastro?Matricula={0}", Uri.EscapeDataString("180000D1D")));

            List<ChamadaCadastro> retornoServico = (List<ChamadaCadastro>)JsonConvert.DeserializeObject(retorno, typeof(List<ChamadaCadastro>));

            //Buscando Chamada do dia
            WebClient webClient2 = new WebClient();
            webClient2.Encoding = new System.Text.UTF8Encoding();
            webClient2.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno2 = webClient2.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/ChamadaChamada/GetChamadaChamada?data={0}", Uri.EscapeDataString("2017-05-17")));

            List<ChamadaChamada> retornoServico2 = (List<ChamadaChamada>)JsonConvert.DeserializeObject(retorno2, typeof(List<ChamadaChamada>));


            Assert.IsTrue(retornoServico != null);
        }

        [TestMethod]
        public void TesteSaveNovoTAADS()
        {
            //Primeiro Cadastro
            ChamadaCadastro cadastro = new ChamadaCadastro()
            {
                matricula = "123456789",
                nome = "Aline de Campos",
            };
            string json = JsonConvert.SerializeObject(cadastro, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/ChamadaCadastro/SaveChamadaCadastro", json);

            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            //Primeira Chamada
            ChamadaChamada chamada = new ChamadaChamada()
            {
                matricula = "180000D1D",
                turma = "ADS",
                data = "2017-06-30",
            };
            string jsonChamada = JsonConvert.SerializeObject(chamada, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClientChamada = new WebClient();
            webClientChamada.Encoding = new System.Text.UTF8Encoding();
            webClientChamada.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retornoChamada = webClientChamada.UploadString("http://lkrjunior-com.umbler.net/api/ChamadaChamada/SaveChamadaChamada", jsonChamada);

            RetornoServico retornoServicoChamada = (RetornoServico)JsonConvert.DeserializeObject(retornoChamada, typeof(RetornoServico));


            //Segunda Chamada
            ChamadaChamada chamada2 = new ChamadaChamada()
            {
                matricula = "180000D1D",
                turma = "ADS",
                data = "2017-06-30",
            };
            string jsonChamada2 = JsonConvert.SerializeObject(chamada2, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClientChamada2 = new WebClient();
            webClientChamada2.Encoding = new System.Text.UTF8Encoding();
            webClientChamada2.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retornoChamada2 = webClientChamada2.UploadString("http://lkrjunior-com.umbler.net/api/ChamadaChamada/SaveChamadaChamada", jsonChamada2);

            RetornoServico retornoServicoChamada2 = (RetornoServico)JsonConvert.DeserializeObject(retornoChamada2, typeof(RetornoServico));


            //Terceira Chamada
            ChamadaChamada chamada3 = new ChamadaChamada()
            {
                matricula = "123456789",
                turma = "ADS",
                data = "2017-06-30",
            };
            string jsonChamada3 = JsonConvert.SerializeObject(chamada3, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClientChamada3 = new WebClient();
            webClientChamada3.Encoding = new System.Text.UTF8Encoding();
            webClientChamada3.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retornoChamada3 = webClientChamada3.UploadString("http://lkrjunior-com.umbler.net/api/ChamadaChamada/SaveChamadaChamada", jsonChamada3);

            RetornoServico retornoServicoChamada3 = (RetornoServico)JsonConvert.DeserializeObject(retornoChamada3, typeof(RetornoServico));


            //Retorno Ok
            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
        }

        [TestMethod]
        public void TesteGetNovoTAADS()
        {
            //Buscando conteudo do Cadastro
            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/ChamadaCadastro/GetChamadaCadastro?Matricula={0}", Uri.EscapeDataString("123456789")));

            List<ChamadaCadastro> retornoServico = (List<ChamadaCadastro>)JsonConvert.DeserializeObject(retorno, typeof(List<ChamadaCadastro>));

            //Buscando Chamada do dia
            WebClient webClient2 = new WebClient();
            webClient2.Encoding = new System.Text.UTF8Encoding();
            webClient2.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno2 = webClient2.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/ChamadaChamada/GetChamadaChamada?data={0}", Uri.EscapeDataString("2017-06-30")));

            List<ChamadaChamada> retornoServico2 = (List<ChamadaChamada>)JsonConvert.DeserializeObject(retorno2, typeof(List<ChamadaChamada>));


            Assert.IsTrue(retornoServico != null);
        }
        #endregion

        #region Testes Projeto TCC
        [TestMethod]
        public void TesteSaveGeneroAdd()
        {
            Genero genero = new Genero()
            {
                genero = "Teste",
            };
            string json = JsonConvert.SerializeObject(genero, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Genero/SaveGenero", json);

            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
        }

        [TestMethod]
        public void TesteSaveGeneroUpdate()
        {
            Genero genero = new Genero()
            {
                idGenero = 11,
                genero = "novo teste",
            };
            string json = JsonConvert.SerializeObject(genero, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Genero/SaveGenero", json);

            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
        }

        [TestMethod]
        public void TesteSaveGeneroDelete()
        {
            Genero genero = new Genero()
            {
                idGenero = 11,
                excluir = true,
            };
            string json = JsonConvert.SerializeObject(genero, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Genero/SaveGenero", json);

            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
        }

        [TestMethod]
        public void TesteSaveGeneroGet()
        {
            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            //string retorno = webClient.DownloadString("http://lkrjunior-com.umbler.net/api/Genero/GetGenero?idGenero=1");
            //string retorno = webClient.DownloadString("http://lkrjunior-com.umbler.net/api/Genero/GetGenero");
            string retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/Genero/GetGenero?Genero={0}", Uri.EscapeDataString("o")));

            List<Genero> retornoServico = (List<Genero>)JsonConvert.DeserializeObject(retorno, typeof(List<Genero>));

            Assert.IsTrue(retornoServico != null);
        }

        [TestMethod]
        public void TesteSaveAnimalAdd()
        {
            Animal animalAbandonado = new Animal()
            {
                animalTipo = AnimalTipo.Abandonado,
                pessoa = new Pessoa() { idPessoa = 2 },
                descricao = "Animal perdido",
                latitude = Decimal.Parse("-28,824865000000"),
                longitude = Decimal.Parse("-50,150562000000"),

            };
            string json = JsonConvert.SerializeObject(animalAbandonado, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Animal/SaveAnimal", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Animal animalDoacao = new Animal()
            {
                animalTipo = AnimalTipo.Doacao,
                pessoa = new Pessoa() { idPessoa = 2 },
                genero = new Genero() { idGenero = 1 },
                raca = new Raca() { idRaca = 3 },
                idade = 2,
                porte = new Porte() { idPorte = 3 },
                peso = decimal.Parse("1,5"),
                cidade = new Cidade() { idCidade = 1, uf = new Uf() { idUf = 1 } },
                telefone = "51 99876 1234",
                email = "linx@linx.com.br",
                descricao = "Animal Doação mais novo",
                vacinas = "não",
                foto = new Foto() { idFoto = 4},
                nome = "branco",
            };
            json = JsonConvert.SerializeObject(animalDoacao, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Animal/SaveAnimal", json);
            retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "Animal", "Animal"));
            RetornoAnimal retorno1 = (RetornoAnimal)JsonConvert.DeserializeObject(retorno, typeof(RetornoAnimal));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));

        }

        [TestMethod]
        public void TesteSaveAnimalUpdate()
        {
            Animal animalAbandonado = new Animal()
            {
                id = 3,
                animalTipo = AnimalTipo.Abandonado,
                pessoa = new Pessoa() { idPessoa = 2 },
                descricao = "Animal perdido alterado",
                latitude = Decimal.Parse("-30,824865000000"),
                longitude = Decimal.Parse("-52,150562000000"),

            };
            string json = JsonConvert.SerializeObject(animalAbandonado, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Animal/SaveAnimal", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Animal animalDoacao = new Animal()
            {
                id = 4,
                animalTipo = AnimalTipo.Doacao,
                pessoa = new Pessoa() { idPessoa = 2 },
                genero = new Genero() { idGenero = 1 },
                raca = new Raca() { idRaca = 3 },
                idade = 2,
                porte = new Porte() { idPorte = 3 },
                peso = decimal.Parse("1,5"),
                cidade = new Cidade() { idCidade = 1, uf = new Uf() { idUf = 1 } },
                telefone = "51 99876 1234",
                email = "linx@linx.com.br",
                descricao = "Animal alterado para doação mais novo",
                vacinas = "não",
                foto = new Foto() { idFoto = 1 },
                nome = "teste alterado",
            };
            json = JsonConvert.SerializeObject(animalDoacao, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Animal/SaveAnimal", json);
            retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "Animal", "Animal"));
            RetornoAnimal retorno1 = (RetornoAnimal)JsonConvert.DeserializeObject(retorno, typeof(RetornoAnimal));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));

        }

        [TestMethod]
        public void TesteSaveAnimalDelete()
        {
            Animal animalAbandonado = new Animal()
            {
                id = 3,
                animalTipo = AnimalTipo.Abandonado,
                pessoa = new Pessoa() { idPessoa = 2 },
                excluir = true,
            };
            string json = JsonConvert.SerializeObject(animalAbandonado, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Animal/SaveAnimal", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Animal animalDoacao = new Animal()
            {
                id = 4,
                animalTipo = AnimalTipo.Doacao,
                pessoa = new Pessoa() { idPessoa = 2 },
                excluir = true,
            };
            json = JsonConvert.SerializeObject(animalDoacao, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Animal/SaveAnimal", json);
            retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.DownloadString(string.Format("http://lkrjunior-com.umbler.net/api/{0}/Get{1}", "Animal", "Animal"));
            RetornoAnimal retorno1 = (RetornoAnimal)JsonConvert.DeserializeObject(retorno, typeof(RetornoAnimal));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));

        }

        [TestMethod]
        public void TesteSaveFoto()
        {
            byte[] imagemBytes = null;
            string caminhoCompletoImagem = @"C:\\TccServicosSite\\cachorro2.jpg";
            FileStream fs = new FileStream(caminhoCompletoImagem, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            imagemBytes = br.ReadBytes(Convert.ToInt32(fs.Length));
            string teste = Encoding.UTF8.GetString(imagemBytes);
            string teste2 = BitConverter.ToString(imagemBytes);

            Foto foto = new Foto()
            {
                idFoto = 0,
                nome = "cachorro2",
                tipo = "jpg",
                foto = imagemBytes,
            };
            string json = JsonConvert.SerializeObject(foto, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Foto/SaveFoto", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));
        }

        [TestMethod]
        public void TestePessoaFiltroCRUD()
        {
            PessoaFiltro pessoa = new PessoaFiltro()
            {
                idPessoaFiltro = 4,
                pessoa = new Pessoa() { idPessoa = 2 },
                genero = new Genero() { idGenero = 1 },
                raca = new Raca() { idRaca = 3},
                porte = new Porte() { idPorte = 2 },
                idadeMin = 7,
                pesoMin = 22,
                pesoMax = 33,
            };
            string json = JsonConvert.SerializeObject(pessoa, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/PessoaFiltro/SavePessoaFiltro", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            pessoa = new PessoaFiltro()
            {
                idPessoaFiltro = 4,
                pessoa = new Pessoa() { idPessoa = 2 },
                excluir = true,
            };
            json = JsonConvert.SerializeObject(pessoa, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/PessoaFiltro/SavePessoaFiltro", json);

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));

        }

        [TestMethod]
        public void TestePessoaCRUD()
        {
            Pessoa pessoa = new Pessoa()
            {
                nome = "teste",
                telefone = "123",
                email = "teste@teste.com.br",
            };
            string json = JsonConvert.SerializeObject(pessoa, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Pessoa/SavePessoa", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            pessoa = new Pessoa()
            {
                idPessoa = 3,
                excluir = true,
            };
            json = JsonConvert.SerializeObject(pessoa, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Pessoa/SavePessoa", json);

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));

        }
        [TestMethod]
        public void TesteConsultaOtimizada()
        {
            AnimalNegocio c = new AnimalNegocio(Util.Util.NextHex(4));
            var resultado = c.GetAnimal(null,null,1,5,null,null,1);
        }

        [TestMethod]
        public void TesteEnvioEmail()
        {
            EnvioEmail.Email e = new EnvioEmail.Email();
            e.Enviar("luciano.rocha@linx.com.br", Util.Util.NextIntCadastro(), "obrigado", "titulo");
        }

        [TestMethod]
        public void VerificaSenha()
        {
            PessoaSenhaController p = new PessoaSenhaController();
            var retorno = p.VerificaSenha(new Pessoa() { idPessoa = 2, senha = "703025" });
        }

        [TestMethod]
        public void GetComboCidade()
        {
            ComboCidadeController c = new ComboCidadeController();
            var retorno = c.GetComboCidade(1, "s", 1);
        }

        [TestMethod]
        public void MarcarDoadoRecolhido()
        {
            AnimalDoadoRecolhidoController c = new AnimalDoadoRecolhidoController();
            var retorno1 = c.SaveDoadoRecolhido(new Animal() 
            {
                animalTipo = AnimalTipo.Doacao,
                id = 2177,
                DoadoRecolhido = 1,
            });

            var retorno2 = c.SaveDoadoRecolhido(new Animal()
            {
                animalTipo = AnimalTipo.Abandonado,
                id = 116,
                DoadoRecolhido = 1,
            });
        }

        [TestMethod]
        public void SendNotification()
        {
            NotificacaoController c = new NotificacaoController();
            var retorno = c.EnviaNotificacao(new NotificacaoPayload()
                {
                    token = "6db992177e09945a004f9ef57a660e546fb2e37b1cd3d670769591af2ef2cef3",
                    mensagem = "teste",
                });
        }

        [TestMethod]
        public void TesteNotificacaoWebApi()
        {
            NotificacaoPayload not = new NotificacaoPayload()
            {
                token = "6db992177e09945a004f9ef57a660e546fb2e37b1cd3d670769591af2ef2cef3",
                mensagem = "Um novo animal foi cadastrado no app, entre e confira",
            };
            string json = JsonConvert.SerializeObject(not, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/Notificacao/EnviaNotificacao", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));

        }
        #endregion

        [TestMethod]
        public void SalvaToken()
        {
            PessoaTokenController c = new PessoaTokenController();
            var retorno = c.SalvaToken(new Pessoa()
            {
                idPessoa = 2,
                token = "6db992177e09945a004f9ef57a660e546fb2e37b1cd3d670769591af2ef2cef3",
            });
        }

        [TestMethod]
        public void TesteNotificacaoWebApiAsync()
        {
            NotificacaoPayload not = new NotificacaoPayload()
            {
                token = "6db992177e09945a004f9ef57a660e546fb2e37b1cd3d670769591af2ef2cef3",
                mensagem = "Um novo animal foi cadastrado no app, entre e confira",
            };
            string json = JsonConvert.SerializeObject(not, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            webClient.UploadStringAsync(new Uri("http://lkrjunior-com.umbler.net/api/Notificacao/EnviaNotificacao"), json);
            
            Assert.IsTrue(true);

        }

        [TestMethod]
        public void EnviaNotificacaoPessoa()
        {
            PessoaNotificacaoController c = new PessoaNotificacaoController();
            var retorno = c.EnviaNotificacao(new NotificacaoPayload());
        }

        [TestMethod]
        public void TestePessoaNotificacaoWebApi()
        {
            NotificacaoPayload not = new NotificacaoPayload()
            {
                token = "",
                mensagem = "Um novo animal foi cadastrado, entre no app e confira",
            };
            not.mensagem = "Obrigado por baixar o Busca Pet, entre no app e confira as novidades";
            string json = JsonConvert.SerializeObject(not, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/PessoaNotificacao/EnviaNotificacao", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));

        }

        [TestMethod]
        public void TestePessoaNotificacaoPersonalizadaWebApi()
        {
            NotificacaoPayload not = new NotificacaoPayload()
            {
                token = null,
                mensagem = "",
            };
            string json = JsonConvert.SerializeObject(not, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });

            WebClient webClient = new WebClient();
            webClient.Encoding = new System.Text.UTF8Encoding();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
            string retorno = webClient.UploadString("http://lkrjunior-com.umbler.net/api/NotificacaoPersonalizada/EnviaNotificacao", json);
            RetornoServico retornoServico = (RetornoServico)JsonConvert.DeserializeObject(retorno, typeof(RetornoServico));

            Assert.IsTrue(retornoServico != null && retornoServico.status.Equals(1));

        }
    }
}
